// ///注册np_pixlivesdk.ocx
// ///id="NPLiveSDK" classid="clsid:CDF01DAB-AF9C-4163-83FF-98EA3BF3FF80"

// ///注册PIXWin.ocx
// ///id="pixwin" classid="clsid:678788C1-36D6-41AF-A407-5405BCBC6E49"
Ext.define("wufe.util.map.Posa", {
	login_id : 0,
	g_streamID : 0,
	NPLiveSDK : null,
	camlist:new Array(),//摄像机列表
	win_hwnd_list : null, // 窗口句柄列表
	win_index : 0, // 当前焦点视频窗口
	constructor:function(loginid,nplivesdk,streamid){
		this.login_id = loginid;
		this.NPLiveSDK = nplivesdk;
		this.g_streamID = streamid;
	},
	// /Login 登录PVG服务器
	// /////////
	// /参数：ipOrHost PVG服务器的ip或dns
	// /参数：port PVG服务器的服务端口
	// /参数：userName 登录用户名
	// /参数：passwd 登录密码
	// /返回 用户句柄,如果成功大于零
	login : function(ip, user, pswd, port) {
		this.login_id = this.NPLiveSDK.Login(ip, port, user, pswd);
		return this.login_id;
	},
	// /logout 登出PVG服务器
	// /////////
	// /参数：login_id 登录句柄,由Login()获得
	logout : function() {
		// stopRealplay();
		if (this.login_id != 0) {
			this.NPLiveSDK.Logout(this.login_id);
			this.login_id = 0;
		}
	},
	// / ListObjects 列举对象
	// /////////
	// /参数：login_id 登录句柄,由Login()获得
	// /参数：objType 要列举的设备类型
	// / 0x0002 - 网关服务器
	// / 0x0004 - 接入设备
	// / 0x0010 - 摄像头
	// / 0x0020 - 监视器
	// / 0x0040 - 对讲通道
	// / 0x1000 - 报警输入
	// / 0x2000 - 报警输出
	// /参数：serName 服务器名称,当为NULL或_T("")时，表示当前登录服务器
	// / 返回 所列举的对象的个数

	// /首先需要调用count=ListObjects(....)，然后在调用GetObjectInfo(index),index<count
	// / GetObjectInfo 得到列举对象的信息
	// /////////
	// /参数：index 对象索引
	// / 返回 对象信息,json格式字符串
	// /name pm中的摄像机id，av/test/1
	// /title pm中的摄像机标题
	// /path pm中的摄像机上级节点名
	// /host pm中所属视频服务器id，
	// /addr 视频服务器的通道号
	// /level
	getCameraList : function(ip) {
		var camCount = this.NPLiveSDK.ListObjects(this.login_id, 0x0010, "");

		var cameras = new Array();
		for (var i = 0; i < camCount; i = i + 1) {
			var camInfo = eval('(' + this.NPLiveSDK.GetObjectInfo(i) + ')');
			var cam = new Object();
			cam.cameraid = camInfo.name;
			cam.cameraname = camInfo.title;
			cam.cameradept = camInfo.path;
			cam.channel = camInfo.addr;
			cam.deviceid = camInfo.host;
			cam.level = camInfo.level;
			cameras.push(cam);
		}
		
		return cameras;
	},
	// / StartStream 启动实时视频流
	// ////////////////////
	// /参数：login_id 登录句柄,由Login()获得
	// /参数：cameraid AV对象名,通常为"av/"开头的字符串,例如"av/dcam/1"
	// /参数：hwnd 窗口句柄
	// / 返回 返回实时流播放句柄
	StartStream : function(cameraid, hwnd) {

		if (this.login_id == 0)
			return 0;
		else
			return this.NPLiveSDK.StartStream(this.login_id, cameraid, hwnd);

	},
	// / StopStream 停止实时视频流
	// ////////////////////
	// /参数：streamHD 实时视频句柄,由StartStream()获得
	StopStream : function(handle) {
		if (handle == 0)
			return 0;

		var ret = this.NPLiveSDK.StopStream(handle);
		return ret;
	},
	// / SaveStream 保存实时视频流到本地文件
	// ////////////////////
	// /参数：streamHD 登录句柄,由StartStream()获得
	// /参数：fileName 文件名,如:"D:\test.mbf" 或 "test.mbf"
	SaveStream : function(handle, filename) {
		if (handle == 0)
			return;

		var ret = this.NPLiveSDK.SaveStream(handle, filename);
	},
	// / StopSaveStream 停止保存实时视频流
	// ////////////////////
	// /参数：streamHD 登录句柄,由StartStream()获得
	StopSaveStream : function(handle) {
		if (handle == 0)
			return;

		var ret = this.NPLiveSDK.StopSaveStream(handle);
	},

	// / StartRecord 开始服务端手动录像, 注:手动录像在登出后将会自动停止
	// ////////////////////
	// /参数：userHD 登录句柄,由Login()获得
	// /参数：avPath AV对象名,通常为"av/"开头的字符串,例如"av/dcam/1"
	StartRecord : function(cameraid) {

		var ret = this.NPLiveSDK.StartRecord(this.login_id, cameraid);
		return ret;
	},

	// / StopRecord 停止服务端手动录像
	// ////////////////////
	// /参数：userHD 登录句柄,由Login()获得
	// /参数：avPath AV对象名,通常为"av/"开头的字符串,例如"av/dcam/1"
	StopRecord : function(cameraid) {
		var ret = this.NPLiveSDK.StopRecord(this.login_id, cameraid);
		return ret;
	},

	// / PtzControl 云台控制
	// ////////////////////
	// / 注:云台的每一个动作都要调用该接口两次,前面两个参数一样,只是param一次为非0(移动),一次为0（停止）
	// / 参数：login_id 登录句柄,由Login()获得
	// / 参数：cameraid AV对象名,通常为"av/"开头的字符串,例如"av/dcam/1"
	// / 参数：cmd 云台控制命令
	// / 0 - 云台右转
	// / 1 - 云台上仰和右转
	// / 2 - 云台上仰
	// / 3 - 云台上仰和左转
	// / 4 - 云台左转
	// / 5 - 云台下俯和左转
	// / 6 - 云台下俯
	// / 7 - 云台下俯和右转
	// / 8 - 云台左右自动扫描
	// / 9 - 云台停止
	// / 10 - 光圈变化(param>0扩大、param<0缩小、param=0表示停止)
	// / 11 - 焦距变大(param>0倍率变大、param<0倍率变小、param=0表示停止)
	// / 12 - 聚焦调整(param>0前调、param<0后调、param=0表示停止)
	// / 13 - 转到指定预置位
	// / 14 - 设置当前位置为一个预置位
	// / 15 - 接通辅助设备开关(param=1 表示开,param=0 表示关,其它值无效)
	// / 16 - 清洗
	// / 17 - 接通雨刷开关
	// / 18 - 接通灯光电源
	// / 19 - 电源
	// /参数：param 控制参数(云台速度)
	PtzControl : function(cameraid, cmd, speed) {
		if (this.login_id == 0)
			return;

		var ret = this.NPLiveSDK
				.PtzControl(this.login_id, cameraid, cmd, speed);
	},

	StreamRequestIFrame : function(handle) {

		if (handle == 0)
			return;

		var ret = this.NPLiveSDK.StreamRequestIFrame(handle);
	},

	// / QueryRecord 查询录像
	// ////////////////////
	// / 参数：login_id 登录句柄,由Login()获得
	// / 参数：cameraid 摄像机通道名称
	// / 参数：vodType 0-服务器录像, 非0 录像所在的层数,最大值为256
	// / 参数：beginTime 起始时间, 格式："2012-01-01 13:20:00.000" 或 "20120101132000000"
	// / 参数：endTime 结束时间（不含）
	// / 返回时间段个数

	// /首先需要调用count=QueryRecord(....)，然后在调用GetSegmentInfo(index),index<count
	// / GetSegmentInfo 得到录像时间段信息
	// ////////////////////
	// / 参数：index 对象索引
	// / 返回 时间段信息，json格式字符串
	// /path,摄像机id
	// /beginTime,录像文件开始时间
	// /endTime,录像文件结束时间

	QueryRecord : function(cameraid, vodType, begintime, endtime) {
		if (this.login_id == 0)
			return 0;

		var recordcount = this.NPLiveSDK.QueryRecord(this.login_id, cameraid,
				vodType, begintime, endtime);

		var recordinfo = new Array();
		for (var i = 0; i < recordcount; i = i + 1) {
			var info = this.NPLiveSDK.GetSegmentInfo(i);

			info = eval('(' + info + ')');
			// var cam = new Object();
			// cam.cameraid = info.name;

			recordinfo.push(info);
		}

		return recordinfo;

	},

	// / StartPlaybackStream 播放录像
	// ////////////////////
	// / 参数：login_id 登录句柄,由Login()获得
	// / 参数：cameraid 摄像机通道名称:av/test/1
	// / 参数：vodType 0 - 服务器录像, 非0 - 录像所在的层数,最大值为256
	// / 参数：beginTime 开始时间,格式："2012-01-01 13:20:00.000" 或 "20120101132000000"
	// / 参数：endTime 结束时间（不含）
	// / 参数：hwnd 窗口句柄
	// / 返回 得到录像回放的句柄,无论摄像机是否配置了录像，只要存储服务开启，返回值大于0，没开启等于0，想知道是否有录像，用QueryRecord
	StartPlaybackStream : function(cameraid, vodType, begintime, endtime, hwnd) {
		if (this.login_id == 0)
			return 0;

		var ret = this.NPLiveSDK.StartPlaybackStream(this.login_id, cameraid,
				vodType, begintime, endtime, hwnd);
		return ret;
	},

	// / StopPlaybackStream 停止录像回放
	// ////////////////////
	// / 参数：playbackHD 录像回放句柄,由StartPlaybackStream()得到
	StopPlaybackStream : function(handle) {
		var ret = this.NPLiveSDK.StopPlaybackStream(handle);
		return ret;
	},

	// / GetPlaybackStreamPos 获取录像播放进度
	// ////////////////////
	// / 参数：playbackHD 录像回放句柄,由StartPlaybackStream()得到
	// / 返回 当前的播放进度,相对于当前时间段开始时间的毫秒数
	GetPlaybackStreamPos : function(handle) {
		if (handle == 0)
			return 0;

		var ret = this.NPLiveSDK.GetPlaybackStreamPos(handle);
		return ret;
	},

	// / PlaybackControl 录像回放控制
	// ////////////////////
	// /参数： playbackHD 录像回放句柄,由LoginStartPlaybackStream()获得
	// /参数：cmd 控制命令
	PlaybackControl : function(handle, cmd) {
		if (handle == 0)
			return 0;

		var ret = this.NPLiveSDK.PlaybackControl(handle, cmd);
		return ret;
	},

	// / StartDownloadRecord 开始录像下载
	// ////////////////////
	// / 参数： login_id 登录句柄,由LoginLogin()获得
	// / 参数： cameraid 摄像机通道名称
	// / 参数： vodType 0 - 服务器录像, 非0 - 录像所在的层数,最大值为256
	// / 参数： beginTime 开始时间,格式："2012-01-01 13:20:00.000" 或 "20120101132000000"
	// / 参数： endTime 结束时间（不含）
	// / 参数： fileName 要保存的文件名,如:"D:\test.mbf" 或 "test.mbf"
	// / 返回 得到录像下载句柄
	StartDownloadRecord : function(cameraid, vodType, begintime, endtime,
			filename) {
		if (this.login_id == 0)
			return 0;

		var ret = this.NPLiveSDK.StartDownloadRecord(this.login_id, cameraid,
				vodType, begintime, endtime, filename);
		return ret;
	},

	// / GetDownloadRecordPos 得到录像下载进度
	// ////////////////////
	// / 参数：playbackHD 录像下载句柄,由LoginSartDownloadRecord()得到
	// / 返回 当前的播放进度,相对于当前时间段开始时间的毫秒数
	GetDownloadRecordPos : function(handle) {
		if (handle == 0)
			return 0;

		var ret = this.NPLiveSDK.GetDownloadRecordPos(handle);
		return ret;
	},

	// / StopDownloadRecord 停止录像下载
	// ////////////////////
	// / 参数：playbackHD 录像下载句柄,由LoginSartDownloadRecord()得到
	StopDownloadRecord : function(handle) {
		var ret = this.NPLiveSDK.StopDownloadRecord(handle);

	},

	// / PlayFile 播放视频文件
	// ////////////////////
	// / 参数：hwnd 显示窗口句柄
	// / 参数：fileName 文件名,如:"D:\test.mbf" 或 "test.mbf"
	// / 参数：filePlayHD 返回文件播放句柄
	PlayFile : function(hwnd, filename) {
		var ret = this.NPLiveSDK.PlayFile(hwnd, filename);
		return ret;

	},

	// / StopPlayFile 停止播放视频文件
	// ////////////////////
	// / 参数：filePlayHD 文件播放句柄,由PlayFile()获得
	StopPlayFile : function(handle) {
		if (handle == 0)
			return;

		var ret = this.NPLiveSDK.StopPlayFile(handle);

	},

	// / PlayFileControl 文件播放控制
	// ////////////////////
	// / 参数：filePlayHD 文件播放句柄,由PlayFile()获得
	// / 参数：cmd 控制命令
	// / 0 - 播放
	// / 1 - 暂停
	// / 2 - 快放
	// / 3 - 慢放
	// / 4 - 正常
	// / 5 - 单帧播放
	PlayFileControl : function(handle, cmd) {
		if (handle == 0)
			return;

		var ret = this.NPLiveSDK.PlayFileControl(handle, cmd);

	},

	// / GetPlayStatus 得到当前播放状态
	// ////////////////////
	// / 参数：filePlayHD 文件播放句柄,由PlayFile()获得
	// / 参数：status 返回当前的播放状态
	// / 0 - 播放
	// / 1 - 暂停
	// / 2 - 快放
	// / 3 - 慢放
	// / 4 - 正常
	// / 5 - 单帧播放
	GetPlayStatus : function(handle) {
		if (handle == 0)
			return "未知";

		var ret = this.NPLiveSDK.GetPlayStatus(handle);
		return ret;
	},

	// / GetPlaySpeed 得到当前播放速度
	// ////////////////////
	// / 参数：filePlayHD 文件播放句柄,由PlayFile()获得
	// / 参数：speed 返回当前的播放速度
	// / -3 - 慢8倍速播放
	// / -2 - 慢4倍速播放
	// / -1 - 慢2倍速播放
	// / 0 - 正常播放
	// / 1 - 快2倍速播放
	// / 2 - 快4倍速播放
	// / 3 - 快8倍速播放
	GetPlaySpeed : function(handle) {
		if (handle == 0)
			return "未知";

		var ret = this.NPLiveSDK.GetPlaySpeed(handle);
		return ret;
	},

	// / GetPlayPosition 得到当前播放进度
	// ////////////////////
	// / 参数：filePlayHD 文件播放句柄,由PlayFile()获得
	// / 参数：pos 返回当前的播放进度,单位：毫秒(ms)
	GetPlayPosition : function(handle) {
		if (handle == 0)
			return -1;

		var ret = this.NPLiveSDK.GetPlayPosition(handle);
		return ret;
	},

	// / GetDuration 得到当前文件的总长度
	// ////////////////////
	// / 参数：filePlayHD 文件播放句柄,由PlayFile()获得
	// / 参数：dur 返回文件总长度,单位：毫秒(ms)
	GetDuration : function(handle) {
		if (handle == 0)
			return -1;

		var ret = this.NPLiveSDK.GetDuration(handle);
		return ret;
	},

	// / 获取色彩值
	// ////////////////////
	// / 参数：liveHD 流句柄，由LoginStartStream()或LoginStartPlaybackStream()获得
	// / 返回 颜色信息，json格式的字符串
	// / brightness 亮度， 值为[-127,127]
	// / contrast 对比度，值为[-127,127]
	// / saturation 饱和度，值为[-127,127]
	// / hue 色调， 值为[-127,127]
	GetColor : function(handle) {
		var info = {};
		info.brightness = "";
		info.contrast = "";
		info.saturation = "";
		info.hue = "";

		if (handle == 0)
			return info;

		info = this.NPLiveSDK.GetColor(handle);
		info = eval('(' + info + ')');

		return info;
	},

	// / SetColor 设置色彩值
	// ////////////////////
	// / 参数：liveHD 流句柄，由LoginStartStream()或LoginStartPlaybackStream()获得
	// / 参数：brightness 亮度， 值为[-127,127]
	// / 参数：contrast 对比度，值为[-127,127]
	// / 参数：saturation 饱和度，值为[-127,127]
	// / 参数：hue 色调， 值为[-127,127]
	SetColor : function(handle, brightness, contrast, saturation, hue) {
		if (handle == 0)
			return;

		this.NPLiveSDK.SetColor(handle, brightness, contrast, saturation, hue);

	}
});